package org.laperra.tienda.model;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.TableGenerator;
import javax.persistence.OneToMany;
import javax.persistence.Transient;

@Entity
public class Producto implements Serializable{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private Integer idProducto;
	private TipoProducto tipoProducto;
	private String descripcion;
	private Float precioBase;
	private Set<LineaFactura> lineas = new HashSet<LineaFactura>(0);
	 
	
	public Producto(){
		
	}
	

	public Producto(Integer idProducto, Integer idTipoProducto,
			TipoProducto tipoProducto, String descripcion, Float precioBase) {
		this.idProducto = idProducto;
		this.tipoProducto = tipoProducto;
		this.descripcion = descripcion;
		this.precioBase = precioBase;
	}

	@Id
	@TableGenerator(name="idProducto",table="ProductoPrimaryKey",pkColumnName="productoKey",pkColumnValue="productoValor", allocationSize=1)
	@GeneratedValue(strategy=GenerationType.TABLE, generator="idProducto")//genera un valor para la clave de forma automatica
	@Column(unique = true, nullable = false)
	public Integer getIdProducto() {
		return idProducto;
	}

	public void setIdProducto(Integer idProducto) {
		this.idProducto = idProducto;
	}

	

	@ManyToOne
	@JoinColumn(name="idTipoProducto")
	public TipoProducto getTipoProducto() {
		return tipoProducto;
	}

	public void setTipoProducto(TipoProducto tipoProducto) {
		this.tipoProducto = tipoProducto;
	}

	@Column(nullable=false)
	public String getDescripcion() {
		return descripcion;
	}
	@Column(nullable=false)
	public void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}
	@Column(nullable=false)
	public Float getPrecioBase() {
		return precioBase;
	}

	@Column(nullable=false)
	public void setPrecioBase(Float precioBase) {
		this.precioBase = precioBase;
	}
	public void setLineas(Set<LineaFactura> lineas) {
		this.lineas = lineas;
	}
	
	@OneToMany(fetch = FetchType.LAZY, mappedBy = "pk.producto", cascade=CascadeType.ALL)
	@Transient
	public Set<LineaFactura> getLineas() {
		return lineas;
	}
	
	
}
